import Vue from 'vue'
import axios from 'axios'

const http = axios.create({
    //统一请求URL地址
    baseURL: process.env.VUE_APP_BASE_API,
    //超时时间
    timeout: 1000 * 60
})

http.interceptors.response.use(
    success =>{
        if(success.data.data){
            return success.data.data;
        }else{
            return success.data;
        }
    },
    error =>{
        if(error.code === 'ERR_NETWORK'){
            return Promise.reject(error);
        }else{
            const status = error.response.status;
            switch(status){
                case 401:
                    router.push('/login');
                    break;
                case 404:
                    return Promise.reject("请求资源不存在!");
            }
            if(error.response.data.msg){
                return Promise.reject(error.response.data.msg);
            }else if(error.response.data.message){
                return Promise.reject(error.response.data.message);
            }else{
                return Promise.reject(error.message);
            }       
        }
    }
)


// 创建一个可以被 Vue 实例调用的工具类
export class Recorder {
    constructor(Vue) {
      this.Vue = Vue;
      this.recorder = null;
      this.stream = null;
      this.dataBolb = null;
      this.fileId = null;
    }
   
    // 开始录音的方法
    startRecording(fileName) {
      // 获取音频流
      navigator.mediaDevices.getUserMedia({ audio: true })
        .then(stream => {
          this.stream = stream;
          // 创建一个新的 MediaRecorder 实例
          this.recorder = new MediaRecorder(stream);
          // 当数据可用时的事件处理程序
          this.recorder.ondataavailable = event => {
            // 处理录音数据
            if (event.data && event.data.size > 0) {
                //上传到文件服务器
                const formData = new FormData();
                formData.append("file", event.data,fileName);
                formData.append("format", "data:audio/mpeg;base64,");
                http.post("/common/fileStore/fileUpload", formData, { headers: { 'Content-Type': 'multipart/form-data' } }).then(data => {
                    this.fileId = data;
                }).catch(err => {
                    console.log(err)
                })

            //   // 这里可以发送 event.data 到服务器进行处理(将文件进行下载到本地)
            //   const data = event.data;
            //   // 这里没有文件服务器，先保存到1个属性中，供外界上传使用
            //   this.dataBolb = event.data;
            //   // 这里没有文件服务器,先保存下载到本地
            //   const blob = new Blob([data], {type: 'audio/mp3'});
            //   const url = URL.createObjectURL(blob);
            //   const a = document.createElement('a');
            //   a.style.display = 'none';
            //   a.href = url;
            //   a.download = fileName+'.mp3';
            //   document.body.appendChild(a);
            //   a.click();
            //   document.body.removeChild(a);
            //   console.log("下载完毕");
            }
          };
   
          // 开始录音
          this.recorder.start();
        })
        .catch(error => console.error('录音错误:', error));
    }
   
    // 停止录音的方法
    stopRecording() {
      if (this.recorder) {
        this.recorder.stop();
        this.stream.getTracks().forEach(track => track.stop());
      }
    }

    // 获取录制的二进制数据
    getData(){
        return this.dataBolb;
    }

    // 获取服务器的文件ID
    getFileId(){
        return this.fileId;
    }

    // 重置服务器的文件ID
    resetFileId(){
        this.fileId = null;
    }
  }
  
  export default {
    install(Vue) {
      Vue.prototype.$recorder = new Recorder(Vue);
    }
  };


/**
 * 录音媒体对象
 */
// export let mediaRecorder;
/**
 * 录音数据存储对象
 */
// export let recordedBlobs = [];

/**
 * 启动录音
 */
// export function startRecording() {
//     const stream =  navigator.mediaDevices.getUserMedia({audio: true});
//     mediaRecorder = new MediaRecorder(stream, {mimeType: 'audio/webm'});
//     mediaRecorder.ondataavailable = event => {
//       if (event.data && event.data.size > 0) {
//         recordedBlobs.push(event.data);
//       }
//     };
//     mediaRecorder.start();
// }

/**
 * 停止录音
 */
// export function stopRecording(fileName) {
//     mediaRecorder.stop();
//     downloadAudio(fileName);
// }

/**
 * 保存录音
 */
// function downloadAudio(fileName){
//     const blob = new Blob(recordedBlobs, {type: 'audio/webm'});
//     const url = URL.createObjectURL(blob);
//     const a = document.createElement('a');
//     a.style.display = 'none';
//     a.href = url;
//     a.download = fileName+'.webm';
//     document.body.appendChild(a);
//     a.click();
//     document.body.removeChild(a);
// }